コーディングを支える技術 英文チェック
翻訳者フィードバック
Chaper12
A2,A3: ページが変わる可能性がある件、確かにご指摘の通りなので、節にも番号を振ることにしようと思います。その場合「section "6.3.2 CLUへの導入"で言及した」という表現になります。
A4 “a bit of a mouthful” →"a bit complex" この方針で書き換えましょう
A5 >SはTの部分集合ですね訳ぬけ
読み直してみると、なくても良さそうです。
A6 今の訳のままで良いです
A7 コメントの意味がわかりません
A8 同上
A9 class itselfで良いです。it will provide it はit will provide the answerの方がいいかも?
A10
- The “UseInheritance” class inherits from the “Hello” class and has the “hello” method available (❷) which is executed in ❸.
これは文を分割しましょう。
+ The “UseInheritance” class inherits from the “Hello” class. So it has the “hello” method as its own method (❷). The mthod is executed in ❸.
- On the other hand, the “UseDelegate” method doesn’t inherit from the “Hello” class (❹).
+ On the other hand, the “UseDelegate” class doesn’t inherit from the “Hello” class (❹).
- Instead, it creates an object from the “Hello” class and “delegates” the execution of the “hello” method to the object in ❻.
+ Instead, it creates an object of the “Hello” class (❺) and “delegates” the execution of the “hello” method to the object in ❻.
A11 overridingが正しい
A16 こちらもページではなく節番号"12.2.2 Multiple Inheritance: Useful for Code Reuse" で参照することにします。
A18
原文がカジュアルすぎて翻訳しづらかったですね、すみません。ここで伝えたかったことは下記の通りです:
Pythonの標準ライブラリではUDPServerクラスにForkingMixInクラスを混ぜ込んで新しいクラスを作ってからインスタンスを作っている
ForkingMixInは「MixIn」という名前から、それ単体でインスタンスを作ってはいけないことが明らかである。
しかしUDPServerは、それ単体でインスタンスを作っても良いクラスなのかどうかが名前からはわからない。
ForkingMixInはUDPServerにprocess_requestメソッドを提供している。UDPServerは、他のクラスからprocess_requestの提供を受けないと期待通りに動かないクラスなのか、単体で使っても良いクラスなのか?
Pythonには、どういう組み合わせでなら使って良いのかをプログラム上でそれを表明する手段はない。だから、正しく組み合わせていないクラスのインスタンスを作ってしまう可能性がある。
Scalaのトレイトには「どういうメソッドが必要か」を宣言する手段がある。
chap12 done
Chapter11
A3 和書のページ数と原書のページ数が同一かわからないので、ページ番号は無しで良いです。
A7 “a bit of a mouthful” →"a bit complex" この方針で書き換えましょう
A8 FORTRAN 66が正しいです
A9
うーむ、英文で見るとまどろっこしい違和感が。原文の方を直します。
- The idea here is that a first-class value is not quite limited in terms of how it can be used, just as a “first-class citizen” can receive fair treatment.
和文「"first-class"という表現は、普通の権利を有する市民"first-class citizen"と、選挙権を持たないなどの劣った待遇を受ける"second-class citizen"を区別するために使われていました。」
+ The expression "first-class" was used to distinguish between "first-class citizen" with ordinary right and "second-class citizen" receiving inferior treatment such as not having voting rights.
メモ
A member of a class of individuals that receive fair treatment.
(programming, languages) Synonym of first-class object
「ファーストクラス」という言葉が現代では飛行機のファーストクラスみたいに思われて「preferential treatment」と誤解されかねない
一方で「一級市民」「二級市民」という言葉も現代ではそれほど認知度が高くないようだ
プレブスはローマ社会で二級市民として認知されており、共和政への転換期前後までは、宗教的な儀式および行政に関わることは許されてはいなかった。
A10, A11
While Perl creates a package to implement the counter, JavaScript uses a hash for the same purpose.
Another difference you may notice by looking at the code is the use of “this” as a keyword, which is a reserved word in JavaScript. When a function “my_method” is called in conjunction with an object “obj” (“obj.my_method()”), “this” is used to refer to “obj” within “my_method” itself.
In Perl, we say “my $values = shift” to explicitly extract a parameter, whereas JavaScript obtains the value implicitly with a variable “this”. In the above example, since “this” is used within the function “push” when it’s called with “counter.push()”, “this” refers to “counter”. Therefore, we can replace “this” with “counter” and the program will still work.
refersで問題なさそう
A12
This way, we can achieve the following:
...
These aims can be achieved as in Perl’s packages.
ロジックとしては間違ってはいないのですが説明の意図としては「Perl版にはこの3つの特徴があった、下記のコードではそれが全て実現できている」の流れなのでねじれている感じはします。
A15
We call this association of a value with a name a “(named) binding”. By combining the open function “push” with the scope of “makeCounter”, the program no longer has to look for variable definitions outside of the scope because the function “push” is now a completed whole. We use the term “closed” to describe this state of completeness.
ロジックとしては間違っていないですが、伝わりにくいということですよね。
これはこちらで図を追加することにします。
Chaper10
A7
Another approach is to mark a process that shouldn’t be interrupted during its execution.
For example, we can decide that we mustn’t interrupt a thread that has the value of 0 in its memory.
これだとeach thread が a markをそれぞれ持っていそうですけども、実際にはthreadsがmarkをshareしています。原文にあった「印を共有する」の「共有」あたりの話が消えてしまっています。
また、値が「0でない時」に「割り込んではいけない」です。今の書き方だと逆の意味になるのでは。
Each thread checks the memory value of a process before its execution;
the process thread can be executed if the value is 0; if it’s the value is not 0, it the thread has to wait for it the value to become 0 again.
A9
The point is to temporarily create a new version of the process in which some modifications are made and, once these modifications have been made, the new version will reflect the changes to the data outside of the temporary space.
"create a new version of the process" これ原文がわかりにくかったですね
「新しいバージョンを作る」というのはいわば"create a local copy of the shared values"です
共有されているXやYを直接書き換えるのではなく、一時的に手元にlocal copyを作ってそれを書き換え、ひとかたまりの処理が終わってから手元の変更をまとめて共有のXやYに反映する。
その際に誰か別の人が先に書き換えていた場合には、手元の修正を破棄して、新しいデータからやり直すわけです。(この辺りの話がp.182に書かれている)
Chapter9
A1
What is great about a linked list is that
シンプルに「linked listを使うメリットは〜」で良いかも
A2, A3
単純に削除するのではなく「日本では80年代にはscattering functionという意味の言葉が使われていた。これは関数の目的をよく表した訳語だと思う。しかし今では日本でもhash functionという言葉が一般的だ。」ぐらいに丸めた脚注にするのが良いかなと思います。
A6
British people use the Roman alphabet, to which additional letters, such as ç, are added in the French writing system.
この前後の文章で重要なところは「Characters(文字)という言葉で連想するものは文化によって異なる」というところです。文字の概念は自明ではない、ということが言いたいわけです。writing systemの話にしてしまうと、それは国ごとに定められているものであって、直後のギャル文字の例などとマッチしなくなります。(日本でギャル文字が正書法に定められているわけではありませんから)
A9 ここの原文で「アルファベット」と読んでいるものはA-Zのことです。
A11 翻訳不要です。
A16 "a"で良いです
A17 指摘の通り
A19 文頭のdecodeはcase sensitiveなコードの一部なので大文字にしたくないです。Theとかをつけるのはダメでしょうか?
chapter9 done
Chapter8
A1 点灯しているライトが黒で消灯しているライトが白なのは確かに「点灯している方が明るい」という考え方だと逆になっているように思えるかもしれないが、書籍は背景が白なので「消灯している=背景と同じ」が白になっている。これは2ページ先の7セグの話になったときに重要で、7セグ液晶は背景が明るく文字が黒いが、7セグLEDは背景が暗く文字が明るい。どちらが明るいかは本質ではなく、背景と同じなのが0、背景と異なるのが1である。
A3
- Black circles and white circles represent each represent 1 and 0
+ Black circles represent "on" and white circles represent "off"
A4
なるほど、こう加筆すると良いでしょうか。
Base-2 system is commonly called "binary number system", where "bi-" means 2.
A9
- When the language processing wants to get the value, it has to read the bit stream on the memory as PyObject
+ When the Python implementation in C get the value from the memory, it consider the bit stream on the memory as PyObject
A11 仮の訳を当てて、原題は脚注にしましょう
Chapter7
A4
- global variables are worthless
+ global variables are harmful
メモ
「対応表」がscopeと訳されているけど、symbol tableの方が適切かも。
A6
To address this problem, the writers of Python decided to modify this behavior, and in 2001, Python 2.1 was released to implement the expected behavior for a nested scope described in Fig 7.9
シンプルにしましょう
To address this problem, Python 2.1 was released in 2001 to implement the expected behavior for a nested scope described in Fig 7.9
A8
- However, we can avoid the problem of name collision because class names are hierarchical, and we have to import a class for it to be used at all
+ However, we can avoid the problem of name collision because class names are hierarchical, and we have to explicitly import classes which we want to access.
Chapter6
A1 指摘の通り、"To Err is Human"になぞらえるのは微妙。想定する非ネイティブ読者がその格言を知っていると仮定するのも微妙なので、"Program may fail"とかで良いのではないかと。
A3 仮訳しましょう
A4
In PL/I we first register the processes to be run for errors and then write potentially erroneous code, whereas languages that are popular today, such as Java, implement potentially erroneous code first, followed by the code that handles errors.
(try{......}で囲って)の訳抜けはご指摘の通りですが、そもそもこの文章が長すぎると思いました。
ここで言いたいことは下記の通りです
PL/Iは先にerror handlingのcodeを書いてから、potentially erroneous codeを書く
今日popularなJavaなどでは、先にpotentially erroneous codeを書いてから、error handlingのcodeを書く
C++ではpotentially erroneous codeをtry{...}で囲う
この構文はいつどうやって生まれたのか?
A5
日本語から翻訳されたものをネイティブが直接引用と誤認しているみたいですけど、ということはそもそも直接引用と誤認しそうな表現になっている状態が良くないと思うので引用符を外して整理した方が良いと思いました
現状
Programmers can make mistakes in a variety of ways.
He might forget about the possibility that a statement can throws an exception,
or he may implement exception handling in wrong places or with wrong types.
In order to make sure that those things become less likely to happen and that a compiler can give us warnings about the mistakes made by programmers, we need 2 things.
Firstly, we need to clearly declare what types of exceptions a statement could raise.
Secondly, we need to create a syntax that wraps around a potentially erroneous process.”
提案
He thought that there were two problems
* Programmers may forget about the possibility that a statement can throws an exception
* Programmers may implement exception handling in wrong places or with wrong types
To reduce this problem, and also, in order for the compiler to warn you about this problem, programming language should have following feature
* Firstly, we need to clearly declare what types of exceptions a statement could raise.
* Secondly, we need to create a syntax that wraps around a potentially erroneous code.
もう少し直した方が良い気はしますが、とりあえずフィードバックしておきます。
A7 A8
With SEH, you can ensure that resources such as memory blocks and files are correctly if execution unexpectedly terminates. You can also handle specific problems—for example, insufficient memory—by using concise structured code that does not rely on goto statements or elaborate testing of return codes.
確かに、MSDNの原文の英語がおかしいですね。
are correctly ifをare correctly released ifにして、脚注で「原文にreleasedはなかったが意味が通るように著者が修正した」と明記しましょう
A10
提案の通りだとすごくまどろっこしく感じるのですが"paired processes", "pairing processes", "encoupled processes"あたりでどうでしょうか
A11
今のままで良さそう
Chapter5
A4
The answer lies in its ability to facilitate the processing of certain types of code. Indeed, recursion allows us to write clear code when it comes to processing a nested data structure where a process is being applied to a certain parameter and, within this process, the same process is also being applied to another parameter. When dealing with a nested data structure, it’s common to write code with some nested structures init.
日本語がまどろっこしかったですね、意図としては
再帰呼び出しは入れ子になった処理を書くときに楽
入れ子になった処理とは、ある処理をやっている最中に、同じ処理を別の対象に対して行うような処理だ
特に入れ子になったデータ構造を扱うときに、この種の処理が必要になることが多い
ということです。
A5
単純に削るか、It's complete.とかで良いかと
Chapter4
A3 modulesは不要
Chapter3
A3 こちらの件8月8日のメールで下記のようにコメントしたのでご確認ください
2章p20に関してですが、「2 3 * 1 +」という命令列の順番と
「2と3をかけ、1をたす」という日本語の順番が同じであることを説明した文章なので
単純に「日本語」を「英語」に置き換えたのでは意味が通らなくなります。
本文は「日本語」のままにして、脚注で
「日本語では 『2と3をかけ(multiply)、1をたす(add)』と言う」
と補足するのがよいかなと思いました。
A6
The same syntax tree for both FORTH and LISP
これは"syntax tree of FORTH and LISP are the same"とかでどうでしょう
A7
これはさすがにシンプルにしすぎかと
A8
- Don’t know what you want to create?
+ Are you undecided about what you want to create?
ついでに下記のように直すと良いかなと思います
- Why don’t you start by creating something simple?
+ You have to start by creating something simple.
Chapter2
A1 削除で良いと思います
A2, A3 指摘の通りです
Chapter1
A1
Learning several languages will help you understand an important fact, which is that each language has specific rules upon which it operates.
いや、ここで言いたいのはもっとシンプルに、Rules differ among languages ということです。
A2 仮訳お願いします
A4 入れた方が良いです
非翻訳者用タスクメモ
Liskov Substitution Principle
"on page 67" がリフローでは保たれないので"6.3.2 CLUへの導入"をリンクに変える
p.224 footnote 元はJavaのエラーメッセージなので、厳密に言えば英語版Javaでのエラーメッセージを確認すべきか?(優先度低)
正誤表 p.226 "図12.3"は"図12.12"の誤り(日本語版第2刷にて誤りの存在を確認)
p.229 footnote 14 「C++の設計と進化」の和書からの引用なので、原書での表現を確認する
p.186も同様。ページ数も要確認。
p.208も。
p.72も。
p.230 "12.2.2 Multiple Inheritance: Useful for Code Reuse" をリンクにする
p.192 footnote 6 Programming in Modula-2 での原文表記を確認する(PDFのはず)
正誤表 p.199 "first-class"という表現は、普通の権利を有する市民"first-class citizen"と、選挙権を持たないなどの劣った待遇を受ける"second-class citizen"を区別するために使われていました。
p.207 伝わりにくいので解説の図を追加 https://gyazo.com/a7444659a9dae55cfa51e29b56757bc3
p.77からのp.66への言及を、ページ番号ではなく章番号にする
---